﻿using System;
using System.Collections.Generic;
using YawetagDemo.Framework.Data;
using YawetagLib.System.Data;
using YawetagLib.System.Services;

namespace YawetagDemo.Framework.Services
{
    public interface IMusicService : IService
    {
        IArtist GetArtist(int artistID);
        IList<IArtist> GetArtists();
        IArtist CreateArtist(string name, DateTime? dob);
        IArtist UpdateArtist(int artistID, string name, DateTime? dob);
        void DeleteArtist(int artistID);

        IBand GetBand(int bandID);
        IList<IBand> GetBands();
        IBand CreateBand(string name);
        IBand UpdateBand(int bandID, string name);
        void DeleteBand(int bandID);
        void AddArtistToBand(int bandID, int artistID);
        void RemoveArtistFromBand(int bandID, int artistID);

        IAlbum GetAlbum(int albumID);
        IAlbum CreateAlbum(int bandID, string name, DateTime releaseDate);
        IAlbum UpdateAlbum(int albumID, string name, DateTime releaseDate);
        void RankAlbum(int albumID, int personID, byte stars);
        void DeleteAlbum(int albumID);

        void LogArtists(Func<IArtist, string> getArtist);

        PagedResultInfo<IAlbumRankingItem> GetAlbumRankingItems(string filterCriteria, string sortExpression, 
            int startRowIndex, int? maximumRows);
    }
}
